package case2

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql" // 连接mysql驱动
	"log"
)

func Test() {
	fmt.Println("🎯示例二：初始化连接Mysql")

	var url string = "root:123456@(127.0.0.1:3306)/case1?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open("mysql", url)
	if err != nil {
		fmt.Println("连接失败,", err)
	}

	log.Println("Connected to MySQL database successfully!")

	// 自动迁移模式，会创建表结构，若是不存在的话
	db.AutoMigrate(&Dog{})

	//// 创建一条数据
	//d1 := Dog{
	//	Id:   1,
	//	Name: "小黄",
	//	Age:  2,
	//}
	//db.Create(&d1)

	//// 创建一条数据
	//d3 := Dog{
	//	Id:   2,
	//	Name: "小强",
	//	Age:  4,
	//}
	//db.Create(&d3)

	// 查询第一条数据
	var d2 Dog
	var dogArr2 []Dog
	fmt.Println(d2, dogArr2)

	//db.First(&d2)
	//fmt.Printf("u: %v \n", d2)
	//d2json, _ := json.Marshal(d2)
	//fmt.Printf("select1 u: %v \n", string(d2json))

	//// 根据id查询单条数据
	//db.First(&d2, 1)
	//fmt.Printf("select2 u: %v \n", d2)

	//// 条件查询，返回第一条数据
	//db.Where("name = ?", "小红").First(&d2)
	//fmt.Printf("select3 u: %v \n", d2)

	//// 条件查询，返回第一条数据
	//db.First(&d2, "name = ?", "小红")
	//fmt.Printf("select4 u: %v \n", d2)

	//// 条件查询
	//db.Where("age = ?", 2).Find(&d2)
	//fmt.Printf("select5 u: %v \n", d2)

	//// 排序
	//db.Order("age desc").Limit(10).Find(&dogArr2)
	//fmt.Printf("select6 u: %v \n", dogArr2)

	// 选择指定字段
	//db.Select("name", "age").Find(&dogArr2)
	//fmt.Printf("select7 u: %v \n", dogArr2)

	//// 条数
	//var count1 int
	//db.Model(&Dog{}).Where("age < ?", 25).Count(&count1)
	//fmt.Println("条数：" + strconv.Itoa(count1))

	//// 原生SQL
	//db.Raw("Select name FROM dogs WHERE age < ?", 20).Scan(&dogArr2)
	//fmt.Println(dogArr2)

	//// 更新数据 先查询再更新
	//db.First(&d2, 1)
	//fmt.Println(d2)
	//db.Model(&d2).Update("age", 4)

	//// 更新多字段
	//db.Model(&d2).Updates(map[string]interface{}{
	//	"name": "小小",
	//	"age":  1,
	//})

	////条件更新
	//db.Model(&Dog{}).Where("age < ?", 20).Update("age", 20)

	// 删除记录
	db.First(&d2, 1)
	fmt.Println(d2)
	//db.Delete(&d2)

	// 条件删除
	//db.Where("id = ?", 1).Delete(&d2)

	// 根据主键删除
	//db.Delete(&Dog{}, 10) // 删除ID=10的用户

	// 关闭连接
	defer db.Close()
}

// 定义初始化连接
func mysqlConnect() *gorm.DB {
	var url string = "root:123456@(127.0.0.1:3306)/case1?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open("mysql", url)
	if err != nil {
		fmt.Println("连接失败,", err)
	}

	// 关闭连接
	//defer db.Close()
	return db
}

// 定义模型结构体，让gorm为其创建对应的表数据
// 注意：结构体默认表名带s如：dogs; 其中的属性字段必须大写开头，才会自动映射创建字段!
type Dog struct {
	Id   int    `gorm:"primary_key" json:"id"`
	Name string `gorm:"type:varchar(150)" json:"name"`
	Age  int64  `gorm:"type:bigint" json:"age"`
}
